using System;
using System.Drawing;

namespace Toenda.Rails {
	namespace DataContainer {
		/// <summary>
		/// Class Account. Data object for the user account.
		/// </summary>
		[Serializable]
		public class Account {
			private string m_id;
			private string m_username;
			private string m_email;
			private string m_firstname;
			private string m_lastname;
			private bool m_enabled;
			private bool m_isadmin;
			private long m_ranking;
			private DateTime m_birth;
			private DateTime m_oRegisterDate;
			private DateTime m_prostartdate;
			private DateTime _loginTime;
			private int m_produration;
			private string m_desc;
			private string m_webpage;
			private string m_webpagename;
			private string m_strLocation;
			private string m_strCountry;
			private string m_avatar;
			private string m_usergroupid;
			private string m_usergroupname;
			private int m_maxstoragemb;
			private int m_type;
			private bool m_upgradeinwork;
			private string m_language;
			private AccountSettings _settings;

			/// <summary>
			/// Default constructor
			/// </summary>
			public Account() {
			}

			/// <summary>
			/// Get or set the user id
			/// </summary>
			public string ID {
				get { return m_id; }
				set { m_id = value; }
			}

			/// <summary>
			/// Get or set the user id
			/// </summary>
			public string UserID {
				get { return m_id; }
				set { m_id = value; }
			}

			/// <summary>
			/// Get or set username
			/// </summary>
			public string Username {
				get { return m_username; }
				set { m_username = value; }
			}

			/// <summary>
			/// Get or set email
			/// </summary>
			public string Email {
				get { return m_email; }
				set { m_email = value; }
			}

			/// <summary>
			/// Get or set the firstname of the user
			/// </summary>
			public string Firstname {
				get { return m_firstname; }
				set { m_firstname = value; }
			}

			/// <summary>
			/// Get or set the lastname of the user
			/// </summary>
			public string Lastname {
				get { return m_lastname; }
				set { m_lastname = value; }
			}

			/// <summary>
			/// Get or set the Enabled state of the user
			/// </summary>
			public bool Enabled {
				get { return m_enabled; }
				set { m_enabled = value; }
			}

			/// <summary>
			/// Get or set the value if a user is a admin
			/// </summary>
			public bool IsAdmin {
				get { return m_isadmin; }
				set { m_isadmin = value; }
			}

			/// <summary>
			/// Get or set the ranking
			/// </summary>
			public long Ranking {
				get { return m_ranking; }
				set { m_ranking = value; }
			}

			/// <summary>
			/// Get or set usergroup id
			/// </summary>
			public string UsergroupID {
				get { return m_usergroupid; }
				set { m_usergroupid = value; }
			}

			/// <summary>
			/// Get or set usergroup name
			/// </summary>
			public string UsergroupName {
				get { return m_usergroupname; }
				set { m_usergroupname = value; }
			}

			/// <summary>
			/// Get or set maximal number of megabites to upload
			/// </summary>
			public int MaxStorageMB {
				get { return m_maxstoragemb; }
				set { m_maxstoragemb = value; }
			}

			/// <summary>
			/// Get or set the type of account
			/// </summary>
			public int Type {
				get { return m_type; }
				set { m_type = value; }
			}

			/// <summary>
			/// Get or set the birthday
			/// </summary>
			public DateTime Birthday {
				get { return m_birth; }
				set { m_birth = value; }
			}

			/// <summary>
			/// Get or set the register date
			/// </summary>
			public DateTime RegisterDate {
				get { return m_oRegisterDate; }
				set { m_oRegisterDate = value; }
			}

			/// <summary>
			/// Get or set the start date of a pro account
			/// </summary>
			public DateTime ProStartDate {
				get { return m_prostartdate; }
				set { m_prostartdate = value; }
			}

			/// <summary>
			/// Get or set the login time
			/// </summary>
			public DateTime LoginTime {
				get { return this._loginTime; }
				set { this._loginTime = value; }
			}

			/// <summary>
			/// Get or set the duration time of the pro account
			/// </summary>
			public int ProDuration {
				get { return m_produration; }
				set { m_produration = value; }
			}

			/// <summary>
			/// Get or set the description of the user
			/// </summary>
			public string Description {
				get { return m_desc; }
				set { m_desc = value; }
			}

			/// <summary>
			/// Get or set the webpage of the user
			/// </summary>
			public string Webpage {
				get { return m_webpage; }
				set { m_webpage = value; }
			}

			/// <summary>
			/// Get or set the webpage name of the user
			/// </summary>
			public string WebpageName {
				get { return m_webpagename; }
				set { m_webpagename = value; }
			}

			/// <summary>
			/// Get or set the location of the user
			/// </summary>
			public string Location {
				get { return m_strLocation; }
				set { m_strLocation = value; }
			}

			/// <summary>
			/// Get or set the country of the user
			/// </summary>
			public string Country {
				get { return m_strCountry; }
				set { m_strCountry = value; }
			}

			/// <summary>
			/// Get or set the avatar
			/// </summary>
			public string Avatar {
				get { return m_avatar; }
				set { m_avatar = value; }
			}

			/// <summary>
			/// Get or set thze value if the upgrade is currently in work
			/// </summary>
			public bool UpgradeIsInWork {
				get { return m_upgradeinwork; }
				set { m_upgradeinwork = value; }
			}

			/// <summary>
			/// Get or set the language
			/// </summary>
			public string Language {
				get { return m_language; }
				set { m_language = value; }
			}

			/// <summary>
			/// Get or set the settings
			/// </summary>
			public AccountSettings AccountSettings {
				get { return _settings; }
				set { _settings = value; }
			}
		}
	}
}
